#include "btngroup.h"
#include "ui_btngroup.h"

#include<QPainter>
//获取点击位置以及是哪个键
#include <QMouseEvent>

#include <QSignalMapper>
#include <QToolButton>


btngroup::btngroup(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::btngroup)
{
    ui->setupUi(this);

    // 实例化信号映射器，并设置其父对象为当前类
    m_mapper = new QSignalMapper(this);
    // 初始化当前选中的按钮为“我的文件”按钮，并设置其样式为红色
    m_curBtn = ui->myfile;
    m_curBtn->setStyleSheet("color:red");

    // 将每个按钮的显示文本作为键，对应的按钮指针作为值插入到按钮集合中
    m_btns.insert(ui->myfile->text(), ui->myfile);
    m_btns.insert(ui->sharelist->text(), ui->sharelist);
    m_btns.insert(ui->download->text(), ui->download);
    m_btns.insert(ui->transform->text(), ui->transform);
    m_btns.insert(ui->switchuser->text(), ui->switchuser);

    // 将页面枚举值与对应的按钮文本插入到页面映射中
    m_pages.insert(Page::MYFILE, ui->myfile->text());
    m_pages.insert(Page::SHARE, ui->sharelist->text());
    m_pages.insert(Page::TRANKING, ui->download->text());
    m_pages.insert(Page::TRANSFER, ui->transform->text());
    m_pages.insert(Page::SWITCHUSR, ui->switchuser->text());

    // 设置按钮信号映射
    QMap<QString, QToolButton*>::iterator it = m_btns.begin();
    for(;it != m_btns.end();it++)
    {
        //
        m_mapper->setMapping(it.value(), it.value()->text());
        //
        connect(it.value(),&QToolButton::clicked,[=]()
        {
            m_mapper->map(it.value());
        });
    }
    //static_cast<void(QSignalMapper::*)(const QString &text)>(&QSignalMapper::mapped)
    //新写法
    connect(m_mapper,static_cast<void(QSignalMapper::*)(const QString &text)>(&QSignalMapper::mapped),this,&btngroup::slotButtonClick);
    //qt4语法
    //connect(m_mapper, SIGNAL(mapped(QString)), this, SLOT(slotButtonClick(QString)));

}

btngroup::~btngroup()
{
    delete ui;
}
//设置显示当前用户名
void btngroup::setUsrname(QString user)
{
    ui->login_user->setText(user);
}

// void btngroup::slotButtonClick(Page cur)
// {
//     QString text = m_pages[cur];
//     slotButtonClick(text);
// }

void btngroup::slotButtonClick(QString text)
{
    //
    // 根据按钮文本获取对应的按钮指针
    QToolButton* btn = m_btns[text];

    // 如果当前按钮已经被选中且不是切换用户按钮，则返回
    if (btn == m_curBtn && btn != ui->switchuser) {
        return;
    }

    // 恢复之前按钮的样式为黑色
    m_curBtn->setStyleSheet("color:black");

    // 设置当前按钮的样式为红色
    btn->setStyleSheet("color:red");

    // 更新当前选中的按钮指针
    m_curBtn = btn;

    // 根据按钮文本发出相应的信号
    if (text == ui->myfile->text()) {
        emit sigMyFile(); // 发出“我的文件”信号
    }
    else if (text == ui->sharelist->text()) {
        emit sigShareList(); // 发出“分享列表”信号
    }
    else if (text == ui->download->text()) {
        emit sigDownload(); // 发出“下载”信号
    }
    else if (text == ui->transform->text()) {
        emit sigTransform(); // 发出“转换”信号
    }
    else if (text == ui->switchuser->text()) {
        emit sigSwitchUser(); // 发出“切换用户”信号
    }
}
//设置要移动的窗口对象
void btngroup::setParent(QWidget *parent)
{
    m_parent = parent;
}

//绘制背景图
void btngroup::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPixmap pixmap(":/images/title_bk.jpg");
    painter.drawPixmap(0,0,this->width(),this->height(),pixmap);
}
//获取左键点击位置信息
void btngroup::mousePressEvent(QMouseEvent *event)
{
    //判断是左键点击才获取位置信息
    if(Qt::LeftButton == event->button())
    {
        //求差值
        m_pos = event->globalPos() - m_parent->geometry().topLeft();
    }
}
//获取新的点位移动窗口
void btngroup::mouseMoveEvent(QMouseEvent *event)
{
    //判断是否存在左键
    if(event->buttons() & Qt::LeftButton)
    {
        QPoint pos = event->globalPos() - m_pos;
        m_parent->move(pos);
    }
}

void btngroup::on_btn_min_clicked()
{
    emit minWindow();
}


void btngroup::on_btn_max_clicked()
{
    emit maxWindow();
}


void btngroup::on_btn_close_clicked()
{
    emit closeWindow();
}

